/**
 * 
 */
package br.embedded.socialapp.domain;

import java.util.List;
import java.io.Serializable;

/**
 * @author daniel
 *
 */
public class User implements Serializable, Comparable<User>
{
	private static final long serialVersionUID = -8001724584601408346L;
	
	//private List<Person> friends;		// List of user's friends
	private String aboutMe; 				// A general statement about the person
	private List<String> activities;	// Person's favorite activities
	private List<Address> addresses;	// Addresses associated with the person
	private int age;						// Person's age
	private BodyType bodyType;				// Person's body characteristics
	private List<String> books;		// Person's favorite books
	private List<String> cars;			// Person's favorite cars
	private String children;				// Description of the person's children
	private Address currentLocation;		// Person's current location
	private String dateOfBirth;				// Person's date of birth
	private String drinker;				// Person's drinking status
	
	private List<Email> emails;		// Emails associated with the person
	
	private String ethnicity;				// Person's ethnicity
	private String fashion;					// Person's thoughts on fashion
	private List<String> food;			    // Person's favorite food
	private String gender;					// Person's gender
	private String happiestWhen;			// Describes when the person is happiest
	private boolean hasApp;					// indicate whether the person has used the current app
	private List<String> heroes;		// Person's favorite heroes
	private String humor;					// Person's thoughts on humor
	private String id;						// A string ID that can be permanently associated with this person
	private List<String> interests;	// Person's interests, hobbies or passions
	private String jobInterests;			// Person's favorite jobs, or job interests and skills
	
	private List<Organization> jobs;	// Jobs the person has held
	private List<String> languagesSpoken; // List of the languages that the person speaks as ISO 639-1 codes
	private String livingArrangement;		// Description of the person's living arrangement
	private List<String> lookingFor; // Person's statement about who or what they are looking for, or what they are interested in meeting people for
	private List<String> movies;		// Person's favorite movies
	private List<String> music;		// Person's favorite music
	private PersonName pname;						// the person's name
	private String networkPresence;		// Person's current network status
	private String nickname;				// the person's nickname
	private String pets;					// Description of the person's pets
	private List<Phone> phoneNumbers;	// Phone numbers associated with the person
	private String politicalViews;			// Person's political views
	private Url profileSong;				// Person's profile song
	private String profileUrl;				// Person's profile URL
	private Url profileVideo;				// Person's profile video
	private List<String> quotes;		// Person's favorite quotes
	private String relationshipStatus;		// Person's relationship status
	private String religion;				// Person's religion or religious views
	private String romance;					// Person's comments about romance
	private String scaredOf;				// What the person is scared of
	private List<Organization> schools; // Schools the person has attended
	private String sexualOrientation;		// Person's sexual orientation
	private String smoker;					// Person's smoking status
	private List<String> sports;		// Person's favorite sports
	private String status;					// Person's status, headline or shoutout
	private List<String> tags;			// Arbitrary tags about the person
	private String thumbnailUrl;			// Person's photo thumbnail URL
	private String timeZone;				// Person's time zone, specified as the difference in minutes between Greenwich Mean Time (GMT) and the user's local time
	private List<String> turnOffs;		// Person's turn offs
	private List<String> turnOns;		// Person's turn ons
	private List<String> tvShows;		// Person's favorite TV shows
	private List<Url> urls;			// URLs related to the person, their webpages, or feeds
	
	private FriendshipInfo friendshipInfo;
	private String login;
	
	public User()
	{	
	}
//	
	/**
	 * @return the friends
	 */
/*	public List<Person> getFriends() {
		return friends;
	}
*/
	/**
	 * @param friends the friends to set
	 */
/*	public void setFriends(List<Person> friends) {
		this.friends = friends;
	}
*/	
	/**
	 * @return the aboutMe
	 */
	public String getAboutMe() {
		return aboutMe;
	}

	/**
	 * @param aboutMe the aboutMe to set
	 */
	public void setAboutMe(String aboutMe) {
		this.aboutMe = aboutMe;
	}

	/**
	 * @return the activities
	 */
	public List<String> getActivities() {
		return activities;
	}

	/**
	 * @param activities the activities to set
	 */
	public void setActivities(List<String> activities) {
		this.activities = activities;
	}

	/**
	 * @return the addresses
	 */
	public List<Address> getAddresses() {
		return addresses;
	}

	/**
	 * @param addresses the addresses to set
	 */
	public void setAddresses(List<Address> addresses) {
		this.addresses = addresses;
	}

	/**
	 * @return the age
	 */
	public int getAge() {
		return age;
	}

	/**
	 * @param age the age to set
	 */
	public void setAge(int age) {
		this.age = age;
	}

	/**
	 * @return the bodyType
	 */
	public BodyType getBodyType() {
		return bodyType;
	}

	/**
	 * @param bodyType the bodyType to set
	 */
	public void setBodyType(BodyType bodyType) {
		this.bodyType = bodyType;
	}

	/**
	 * @return the books
	 */
	public List<String> getBooks() {
		return books;
	}

	/**
	 * @param books the books to set
	 */
	public void setBooks(List<String> books) {
		this.books = books;
	}

	/**
	 * @return the cars
	 */
	public List<String> getCars() {
		return cars;
	}

	/**
	 * @param cars the cars to set
	 */
	public void setCars(List<String> cars) {
		this.cars = cars;
	}

	/**
	 * @return the children
	 */
	public String getChildren() {
		return children;
	}

	/**
	 * @param children the children to set
	 */
	public void setChildren(String children) {
		this.children = children;
	}

	/**
	 * @return the currentLocation
	 */
	public Address getCurrentLocation() {
		return currentLocation;
	}

	/**
	 * @param currentLocation the currentLocation to set
	 */
	public void setCurrentLocation(Address currentLocation) {
		this.currentLocation = currentLocation;
	}

	/**
	 * @return the dateOfBirth
	 */
	public String getDateOfBirth() {
		return dateOfBirth;
	}

	/**
	 * @param dateOfBirth the dateOfBirth to set
	 */
	public void setDateOfBirth(String dateOfBirth) {
		this.dateOfBirth = dateOfBirth;
	}

	/**
	 * @return the drinker
	 */
	public String getDrinker() {
		return drinker;
	}

	/**
	 * @param drinker the drinker to set
	 */
	public void setDrinker(String drinker) {
		this.drinker = drinker;
	}

	/**
	 * @return the emails
	 */
	public List<Email> getEmails() {
		return emails;
	}

	/**
	 * @param emails the emails to set
	 */
	public void setEmails(List<Email> emails) {
		this.emails = emails;
	}

	/**
	 * @return the ethnicity
	 */
	public String getEthnicity() {
		return ethnicity;
	}

	/**
	 * @param ethnicity the ethnicity to set
	 */
	public void setEthnicity(String ethnicity) {
		this.ethnicity = ethnicity;
	}

	/**
	 * @return the fashion
	 */
	public String getFashion() {
		return fashion;
	}

	/**
	 * @param fashion the fashion to set
	 */
	public void setFashion(String fashion) {
		this.fashion = fashion;
	}

	/**
	 * @return the food
	 */
	public List<String> getFood() {
		return food;
	}

	/**
	 * @param food the food to set
	 */
	public void setFood(List<String> food) {
		this.food = food;
	}

	/**
	 * @return the gender
	 */
	public String getGender() {
		return gender;
	}

	/**
	 * @param gender the gender to set
	 */
	public void setGender(String gender) {
		this.gender = gender;
	}

	/**
	 * @return the happiestWhen
	 */
	public String getHappiestWhen() {
		return happiestWhen;
	}

	/**
	 * @param happiestWhen the happiestWhen to set
	 */
	public void setHappiestWhen(String happiestWhen) {
		this.happiestWhen = happiestWhen;
	}

	/**
	 * @return the hasApp
	 */
	public boolean isHasApp() {
		return hasApp;
	}

	/**
	 * @param hasApp the hasApp to set
	 */
	public void setHasApp(boolean hasApp) {
		this.hasApp = hasApp;
	}

	/**
	 * @return the heroes
	 */
	public List<String> getHeroes() {
		return heroes;
	}

	/**
	 * @param heroes the heroes to set
	 */
	public void setHeroes(List<String> heroes) {
		this.heroes = heroes;
	}

	/**
	 * @return the humor
	 */
	public String getHumor() {
		return humor;
	}

	/**
	 * @param humor the humor to set
	 */
	public void setHumor(String humor) {
		this.humor = humor;
	}

	/**
	 * @return the id
	 */
	public String getId() {
		return id;
	}

	/**
	 * @param id the id to set
	 */
	public void setId(String id) {
		this.id = id;
	}

	/**
	 * @return the interests
	 */
	public List<String> getInterests() {
		return interests;
	}

	/**
	 * @param interests the interests to set
	 */
	public void setInterests(List<String> interests) {
		this.interests = interests;
	}

	/**
	 * @return the jobInterests
	 */
	public String getJobInterests() {
		return jobInterests;
	}

	/**
	 * @param jobInterests the jobInterests to set
	 */
	public void setJobInterests(String jobInterests) {
		this.jobInterests = jobInterests;
	}

	/**
	 * @return the jobs
	 */
	public List<Organization> getJobs() {
		return jobs;
	}

	/**
	 * @param jobs the jobs to set
	 */
	public void setJobs(List<Organization> jobs) {
		this.jobs = jobs;
	}

	/**
	 * @return the languagesSpoken
	 */
	public List<String> getLanguagesSpoken() {
		return languagesSpoken;
	}

	/**
	 * @param languagesSpoken the languagesSpoken to set
	 */
	public void setLanguagesSpoken(List<String> languagesSpoken) {
		this.languagesSpoken = languagesSpoken;
	}

	/**
	 * @return the livingArrangement
	 */
	public String getLivingArrangement() {
		return livingArrangement;
	}

	/**
	 * @param livingArrangement the livingArrangement to set
	 */
	public void setLivingArrangement(String livingArrangement) {
		this.livingArrangement = livingArrangement;
	}

	/**
	 * @return the lookingFor
	 */
	public List<String> getLookingFor() {
		return lookingFor;
	}

	/**
	 * @param lookingFor the lookingFor to set
	 */
	public void setLookingFor(List<String> lookingFor) {
		this.lookingFor = lookingFor;
	}

	/**
	 * @return the movies
	 */
	public List<String> getMovies() {
		return movies;
	}

	/**
	 * @param movies the movies to set
	 */
	public void setMovies(List<String> movies) {
		this.movies = movies;
	}

	/**
	 * @return the music
	 */
	public List<String> getMusic() {
		return music;
	}

	/**
	 * @param music the music to set
	 */
	public void setMusic(List<String> music) {
		this.music = music;
	}

	/**
	 * @return the pname
	 */
	public PersonName getPname() {
		return pname;
	}
	/**
	 * @param pname the pname to set
	 */
	public void setPname(PersonName pname) {
		this.pname = pname;
	}

	/**
	 * @return the networkPresence
	 */
	public String getNetworkPresence() {
		return networkPresence;
	}

	/**
	 * @param networkPresence the networkPresence to set
	 */
	public void setNetworkPresence(String networkPresence) {
		this.networkPresence = networkPresence;
	}

	/**
	 * @return the nickname
	 */
	public String getNickname() {
		return nickname;
	}

	/**
	 * @param nickname the nickname to set
	 */
	public void setNickname(String nickname) {
		this.nickname = nickname;
	}

	/**
	 * @return the pets
	 */
	public String getPets() {
		return pets;
	}

	/**
	 * @param pets the pets to set
	 */
	public void setPets(String pets) {
		this.pets = pets;
	}

	/**
	 * @return the phoneNumbers
	 */
	public List<Phone> getPhoneNumbers() {
		return phoneNumbers;
	}

	/**
	 * @param phoneNumbers the phoneNumbers to set
	 */
	public void setPhoneNumbers(List<Phone> phoneNumbers) {
		this.phoneNumbers = phoneNumbers;
	}

	/**
	 * @return the politicalViews
	 */
	public String getPoliticalViews() {
		return politicalViews;
	}

	/**
	 * @param politicalViews the politicalViews to set
	 */
	public void setPoliticalViews(String politicalViews) {
		this.politicalViews = politicalViews;
	}

	/**
	 * @return the profileSong
	 */
	public Url getProfileSong() {
		return profileSong;
	}

	/**
	 * @param profileSong the profileSong to set
	 */
	public void setProfileSong(Url profileSong) {
		this.profileSong = profileSong;
	}

	/**
	 * @return the profileUrl
	 */
	public String getProfileUrl() {
		return profileUrl;
	}

	/**
	 * @param profileUrl the profileUrl to set
	 */
	public void setProfileUrl(String profileUrl) {
		this.profileUrl = profileUrl;
	}

	/**
	 * @return the profileVideo
	 */
	public Url getProfileVideo() {
		return profileVideo;
	}

	/**
	 * @param profileVideo the profileVideo to set
	 */
	public void setProfileVideo(Url profileVideo) {
		this.profileVideo = profileVideo;
	}

	/**
	 * @return the quotes
	 */
	public List<String> getQuotes() {
		return quotes;
	}

	/**
	 * @param quotes the quotes to set
	 */
	public void setQuotes(List<String> quotes) {
		this.quotes = quotes;
	}

	/**
	 * @return the relationshipStatus
	 */
	public String getRelationshipStatus() {
		return relationshipStatus;
	}

	/**
	 * @param relationshipStatus the relationshipStatus to set
	 */
	public void setRelationshipStatus(String relationshipStatus) {
		this.relationshipStatus = relationshipStatus;
	}

	/**
	 * @return the religion
	 */
	public String getReligion() {
		return religion;
	}

	/**
	 * @param religion the religion to set
	 */
	public void setReligion(String religion) {
		this.religion = religion;
	}

	/**
	 * @return the romance
	 */
	public String getRomance() {
		return romance;
	}

	/**
	 * @param romance the romance to set
	 */
	public void setRomance(String romance) {
		this.romance = romance;
	}

	/**
	 * @return the scaredOf
	 */
	public String getScaredOf() {
		return scaredOf;
	}

	/**
	 * @param scaredOf the scaredOf to set
	 */
	public void setScaredOf(String scaredOf) {
		this.scaredOf = scaredOf;
	}

	/**
	 * @return the schools
	 */
	public List<Organization> getSchools() {
		return schools;
	}

	/**
	 * @param schools the schools to set
	 */
	public void setSchools(List<Organization> schools) {
		this.schools = schools;
	}

	/**
	 * @return the sexualOrientation
	 */
	public String getSexualOrientation() {
		return sexualOrientation;
	}

	/**
	 * @param sexualOrientation the sexualOrientation to set
	 */
	public void setSexualOrientation(String sexualOrientation) {
		this.sexualOrientation = sexualOrientation;
	}

	/**
	 * @return the smoker
	 */
	public String getSmoker() {
		return smoker;
	}

	/**
	 * @param smoker the smoker to set
	 */
	public void setSmoker(String smoker) {
		this.smoker = smoker;
	}

	/**
	 * @return the sports
	 */
	public List<String> getSports() {
		return sports;
	}

	/**
	 * @param sports the sports to set
	 */
	public void setSports(List<String> sports) {
		this.sports = sports;
	}

	/**
	 * @return the status
	 */
	public String getStatus() {
		return status;
	}

	/**
	 * @param status the status to set
	 */
	public void setStatus(String status) {
		this.status = status;
	}

	/**
	 * @return the tags
	 */
	public List<String> getTags() {
		return tags;
	}

	/**
	 * @param tags the tags to set
	 */
	public void setTags(List<String> tags) {
		this.tags = tags;
	}

	/**
	 * @return the thumbnailUrl
	 */
	public String getThumbnailUrl() {
		return thumbnailUrl;
	}

	/**
	 * @param thumbnailUrl the thumbnailUrl to set
	 */
	public void setThumbnailUrl(String thumbnailUrl) {
		this.thumbnailUrl = thumbnailUrl;
	}

	/**
	 * @return the timeZone
	 */
	public String getTimeZone() {
		return timeZone;
	}

	/**
	 * @param timeZone the timeZone to set
	 */
	public void setTimeZone(String timeZone) {
		this.timeZone = timeZone;
	}

	/**
	 * @return the turnOffs
	 */
	public List<String> getTurnOffs() {
		return turnOffs;
	}

	/**
	 * @param turnOffs the turnOffs to set
	 */
	public void setTurnOffs(List<String> turnOffs) {
		this.turnOffs = turnOffs;
	}

	/**
	 * @return the turnOns
	 */
	public List<String> getTurnOns() {
		return turnOns;
	}

	/**
	 * @param turnOns the turnOns to set
	 */
	public void setTurnOns(List<String> turnOns) {
		this.turnOns = turnOns;
	}

	/**
	 * @return the tvShows
	 */
	public List<String> getTvShows() {
		return tvShows;
	}

	/**
	 * @param tvShows the tvShows to set
	 */
	public void setTvShows(List<String> tvShows) {
		this.tvShows = tvShows;
	}

	/**
	 * @return the urls
	 */
	public List<Url> getUrls() {
		return urls;
	}

	/**
	 * @param urls the urls to set
	 */
	public void setUrls(List<Url> urls) {
		this.urls = urls;
	}
	
	/**
	 * @return the friendshipInfo
	 */
	public FriendshipInfo getFriendshipInfo() {
		return friendshipInfo;
	}

	/**
	 * @param friendshipInfo the friendshipInfo to set
	 */
	public void setFriendshipInfo(FriendshipInfo friendshipInfo) {
		this.friendshipInfo = friendshipInfo;
	}
	/**
	 * @return the login
	 */
	public String getLogin() {
		return login;
	}
	/**
	 * @param login the login to set
	 */
	public void setLogin(String login) {
		this.login = login;
	}
	
	@Override
	public String toString()
	{
		return getLogin();
	}
	
	@Override
	public int compareTo(User o) {
		return getLogin().compareToIgnoreCase(o.getLogin());
	}
	
	@Override
	public boolean equals(Object obj)
	{
		if (obj instanceof User)
		{
			return getLogin().equalsIgnoreCase(((User) obj).getLogin());
		}
		return false;
	}
}
